<HTML>
<HEAD>
<TITLE>
RecursoDeAlmacenamiento.cpp
</TITLE>
</HEAD>
<BODY>
<PRE>
<font color="blue">#include</font> <font color="maroon">"RecursoDeAlmacenamiento.h"</font>

<font color="green">//archivo</font>
RecursoDeAlmacenamiento<font color="black">:</font><font color="black">:</font>RecursoDeAlmacenamiento<font color="black">(</font><font color="blue">char</font> <font color="black">*</font>path, TipoAlmacenamiento tipoA, TipoEstrategia tipoE,TipoMemoria tipoM, TipoIndice tipoI , vector<font color="black">&#60;</font>Dato<font color="black">*</font><font color="black">&#62;</font> listaDatos,PrimaryKey <font color="black">*</font>PK<font color="black">)</font><font color="black">{</font>
    
    FILE <font color="black">*</font> fp<font color="black">=</font> fopen<font color="black">(</font>path, <font color="maroon">"rw"</font><font color="black">)</font>;
    <font color="blue">this</font><font color="black">-</font><font color="black">&#62;</font>ptrBuff<font color="black">=</font>NULL;
    definirIndice<font color="black">(</font>tipoI, PK<font color="black">)</font>;
    definirAlmacenemiento<font color="black">(</font>tipoA<font color="black">)</font>;
    EtgRecUnAlmacenamiento <font color="black">*</font> uni<font color="black">=</font><font color="blue">new</font> EtgRecUnAlmacenamiento<font color="black">(</font>tipoM, tipoI, <font color="blue">this</font><font color="black">-</font><font color="black">&#62;</font>indice, tipoA, tipoE, <font color="blue">this</font><font color="black">-</font><font color="black">&#62;</font>almacenamiento, <font color="black">(</font><font color="blue">void</font><font color="black">*</font><font color="black">)</font>fp, PK<font color="black">)</font>;
    <font color="blue">this</font><font color="black">-</font><font color="black">&#62;</font>recurso <font color="black">=</font><font color="black">(</font>EstrategiaRecurso<font color="black">*</font><font color="black">)</font>uni;
    
<font color="black">}</font>
<font color="green">//buffer</font>
RecursoDeAlmacenamiento<font color="black">:</font><font color="black">:</font>RecursoDeAlmacenamiento<font color="black">(</font><font color="blue">unsigned</font> <font color="blue">int</font> tamBuffer, TipoAlmacenamiento tipoA, TipoEstrategia tipoE, TipoMemoria tipoM, TipoIndice tipoI ,  vector<font color="black">&#60;</font>Dato<font color="black">*</font><font color="black">&#62;</font> listaDatos,PrimaryKey <font color="black">*</font>PK<font color="black">)</font><font color="black">{</font>
    <font color="blue">this</font><font color="black">-</font><font color="black">&#62;</font>ptrBuff<font color="black">=</font>Buffer<font color="black">:</font><font color="black">:</font>getInstance<font color="black">(</font><font color="black">)</font><font color="black">-</font><font color="black">&#62;</font>getPointer<font color="black">(</font><font color="black">)</font>;
    definirIndice<font color="black">(</font>tipoI, PK<font color="black">)</font>;
    definirAlmacenemiento<font color="black">(</font>tipoA<font color="black">)</font>;
    EtgRecUnAlmacenamiento <font color="black">*</font> uni<font color="black">=</font><font color="blue">new</font> EtgRecUnAlmacenamiento<font color="black">(</font>tipoM, tipoI, <font color="blue">this</font><font color="black">-</font><font color="black">&#62;</font>indice, tipoA, tipoE, <font color="blue">this</font><font color="black">-</font><font color="black">&#62;</font>almacenamiento, <font color="blue">this</font><font color="black">-</font><font color="black">&#62;</font>ptrBuff, PK<font color="black">)</font>;
    <font color="blue">this</font><font color="black">-</font><font color="black">&#62;</font>recurso <font color="black">=</font><font color="black">(</font>EstrategiaRecurso<font color="black">*</font><font color="black">)</font>uni;
<font color="black">}</font>
        
<font color="green">// ambos</font>
RecursoDeAlmacenamiento<font color="black">:</font><font color="black">:</font>RecursoDeAlmacenamiento<font color="black">(</font><font color="blue">char</font> <font color="black">*</font>path, <font color="blue">unsigned</font> <font color="blue">int</font> tamBuffer, TipoAlmacenamiento tipoA, TipoEstrategia tipoE, TipoMemoria tipoM, TipoIndice tipoI ,  vector<font color="black">&#60;</font>Dato<font color="black">*</font><font color="black">&#62;</font> listaDatos,PrimaryKey <font color="black">*</font>PK<font color="black">)</font><font color="black">{</font>

    FILE <font color="black">*</font> fp<font color="black">=</font> fopen<font color="black">(</font>path, <font color="maroon">"rw"</font><font color="black">)</font>;
    <font color="blue">this</font><font color="black">-</font><font color="black">&#62;</font>ptrBuff<font color="black">=</font>Buffer<font color="black">:</font><font color="black">:</font>getInstance<font color="black">(</font><font color="black">)</font><font color="black">-</font><font color="black">&#62;</font>getPointer<font color="black">(</font><font color="black">)</font>;
    definirIndice<font color="black">(</font>tipoI, PK<font color="black">)</font>;
    definirAlmacenemiento<font color="black">(</font>tipoA<font color="black">)</font>;
    EtgRecEscrituraDirecta <font color="black">*</font> dir<font color="black">=</font><font color="blue">new</font> EtgRecEscrituraDirecta<font color="black">(</font>tipoM, tipoI, <font color="blue">this</font><font color="black">-</font><font color="black">&#62;</font>indice, tipoA, tipoE, <font color="blue">this</font><font color="black">-</font><font color="black">&#62;</font>almacenamiento, <font color="black">(</font><font color="blue">void</font><font color="black">*</font><font color="black">)</font>fp,PK<font color="black">)</font>;
    <font color="blue">this</font><font color="black">-</font><font color="black">&#62;</font>recurso<font color="black">=</font> <font color="black">(</font>EstrategiaRecurso<font color="black">*</font><font color="black">)</font>dir;

<font color="black">}</font>
    
<font color="blue">void</font> RecursoDeAlmacenamiento<font color="black">:</font><font color="black">:</font>definirAlmacenemiento<font color="black">(</font>TipoAlmacenamiento tipo<font color="black">)</font><font color="black">{</font>

    <font color="blue">this</font><font color="black">-</font><font color="black">&#62;</font>almacenamiento <font color="black">=</font> <font color="black">(</font>Almacenamiento<font color="black">*</font><font color="black">*</font><font color="black">)</font>malloc<font color="black">(</font><font color="maroon">2</font><font color="black">*</font><font color="blue">sizeof</font><font color="black">(</font>Almacenamiento<font color="black">*</font><font color="black">)</font><font color="black">)</font>;
    
    <font color="blue">if</font> <font color="black">(</font>tipo<font color="black">=</font><font color="black">=</font>BUFFER<font color="black">)</font><font color="black">{</font>
        <font color="blue">this</font><font color="black">-</font><font color="black">&#62;</font>almacenamiento<font color="black">[</font><font color="maroon">0</font><font color="black">]</font><font color="black">=</font> <font color="blue">new</font> AlmacenamientoBuffer<font color="black">(</font><font color="blue">new</font> Compuesto<font color="black">(</font><font color="black">)</font><font color="black">)</font>;
        <font color="blue">this</font><font color="black">-</font><font color="black">&#62;</font>almacenamiento<font color="black">[</font><font color="maroon">1</font><font color="black">]</font><font color="black">=</font>NULL;
    <font color="black">}</font>
    <font color="blue">else</font> <font color="blue">if</font> <font color="black">(</font>tipo<font color="black">=</font><font color="black">=</font>ARCHIVO<font color="black">)</font><font color="black">{</font>
        <font color="blue">this</font><font color="black">-</font><font color="black">&#62;</font>almacenamiento<font color="black">[</font><font color="maroon">0</font><font color="black">]</font><font color="black">=</font>NULL; 
        <font color="blue">this</font><font color="black">-</font><font color="black">&#62;</font>almacenamiento<font color="black">[</font><font color="maroon">1</font><font color="black">]</font><font color="black">=</font> <font color="blue">new</font> AlmacenamientoDisco<font color="black">(</font><font color="blue">new</font> Compuesto<font color="black">(</font><font color="black">)</font><font color="black">)</font>;  
    <font color="black">}</font>
    <font color="blue">else</font><font color="black">{</font>
        <font color="blue">this</font><font color="black">-</font><font color="black">&#62;</font>almacenamiento<font color="black">[</font><font color="maroon">0</font><font color="black">]</font><font color="black">=</font> <font color="blue">new</font> AlmacenamientoBuffer<font color="black">(</font><font color="blue">new</font> Compuesto<font color="black">(</font><font color="black">)</font><font color="black">)</font>;
        <font color="blue">this</font><font color="black">-</font><font color="black">&#62;</font>almacenamiento<font color="black">[</font><font color="maroon">1</font><font color="black">]</font><font color="black">=</font> <font color="blue">new</font> AlmacenamientoDisco<font color="black">(</font><font color="blue">new</font> Compuesto<font color="black">(</font><font color="black">)</font><font color="black">)</font>;  
    <font color="black">}</font>   

<font color="black">}</font>

<font color="blue">void</font> RecursoDeAlmacenamiento<font color="black">:</font><font color="black">:</font>definirIndice<font color="black">(</font>TipoIndice tipoI, PrimaryKey <font color="black">*</font>PK<font color="black">)</font><font color="black">{</font>
    <font color="blue">switch</font><font color="black">(</font>tipoI<font color="black">)</font><font color="black">{</font>
    <font color="blue">case</font> HASH<font color="black">:</font> <font color="blue">this</font><font color="black">-</font><font color="black">&#62;</font>indice<font color="black">=</font> <font color="blue">new</font> IndiceHashExtensible<font color="black">(</font>PK<font color="black">)</font>;<font color="blue">break</font>;
    <font color="blue">default</font><font color="black">:</font> <font color="blue">break</font>;<font color="green">//this-&#62;indice= new EstrategiaTree(); esta no esta!!!!</font>
    <font color="black">}</font>

<font color="black">}</font>

    

<font color="blue">void</font> RecursoDeAlmacenamiento<font color="black">:</font><font color="black">:</font>insertar<font color="black">(</font>Dato <font color="black">*</font>dato<font color="black">)</font><font color="black">{</font>
    

<font color="black">}</font>
        
<font color="blue">void</font> RecursoDeAlmacenamiento<font color="black">:</font><font color="black">:</font>modificar<font color="black">(</font>Dato <font color="black">*</font>datoAux<font color="black">)</font><font color="black">{</font><font color="black">}</font>
        
<font color="blue">void</font> RecursoDeAlmacenamiento<font color="black">:</font><font color="black">:</font>eliminar<font color="black">(</font>Dato <font color="black">*</font>datoAux<font color="black">)</font><font color="black">{</font><font color="black">}</font><font color="green">//aca el dato tambien??</font>
        
<font color="blue">void</font> RecursoDeAlmacenamiento<font color="black">:</font><font color="black">:</font>leer<font color="black">(</font>Dato <font color="black">*</font>datoAux<font color="black">)</font><font color="black">{</font><font color="black">}</font><font color="green">//aca el dato tambien??</font>
        
<font color="blue">void</font> RecursoDeAlmacenamiento<font color="black">:</font><font color="black">:</font>listar<font color="black">(</font>Dato <font color="black">*</font>dini, Dato <font color="black">*</font>dfin<font color="black">)</font><font color="black">{</font><font color="black">}</font>

RecursoDeAlmacenamiento<font color="black">:</font><font color="black">:</font>~RecursoDeAlmacenamiento<font color="black">(</font><font color="black">)</font><font color="black">{</font>
    <font color="blue">delete</font><font color="black">(</font><font color="blue">this</font><font color="black">-</font><font color="black">&#62;</font>indice<font color="black">)</font>;
    <font color="blue">if</font><font color="black">(</font><font color="blue">this</font><font color="black">-</font><font color="black">&#62;</font>almacenamiento<font color="black">[</font><font color="maroon">0</font><font color="black">]</font><font color="black">!</font><font color="black">=</font>NULL<font color="black">)</font>
        <font color="blue">delete</font><font color="black">(</font><font color="blue">this</font><font color="black">-</font><font color="black">&#62;</font>almacenamiento<font color="black">[</font><font color="maroon">0</font><font color="black">]</font><font color="black">)</font>;                                                
    <font color="blue">if</font><font color="black">(</font><font color="blue">this</font><font color="black">-</font><font color="black">&#62;</font>almacenamiento<font color="black">[</font><font color="maroon">1</font><font color="black">]</font><font color="black">!</font><font color="black">=</font>NULL<font color="black">)</font>
        <font color="blue">delete</font><font color="black">(</font><font color="blue">this</font><font color="black">-</font><font color="black">&#62;</font>almacenamiento<font color="black">[</font><font color="maroon">1</font><font color="black">]</font><font color="black">)</font>;                                                        
    free<font color="black">(</font><font color="blue">this</font><font color="black">-</font><font color="black">&#62;</font>almacenamiento<font color="black">)</font>;
<font color="black">}</font>


</PRE>
</BODY>
</HTML>
